學習 JavaScript 必定要認識 var, let, const 這三種宣告變數(declare variable)的方式。筆者在學習的過程,可能學習階段的關係,所以分好幾次的學習才有學通的感覺,希望這次可以完整且有邏輯的介紹它們,順便檢核自己的學習。
。 在 function 與 block 以外的區域就是 Global Scope
。 在此宣告的變數可以在任何作用域中被取用
。 寫在 function 裡的區域
。 在此宣告的變數只能在這裡使用
。 用大括號{}括住的區域(可以想到的是有用到大括號的情況:function、if/else、while、for...)
。 在此宣告的變數只能在這裡使用 (但僅限於用 let、const 宣告的變數,不包含 var)
var
簡介:
var
宣告變數,該變數只能在 Function Scope 取用,不能在其他地方取用var myName = 'Kim';
function greeting() {
var greet = 'Hi';
console.log(`${greet} ${myName}.`);
}
console.log(myName); // print: Kim
console.log(greet); // Uncaught ReferenceError: greet is not defined
var
,它是屬於 Global Scope 的if (true) {
var myName = 'Kim';
}
console.log(myName); // print: Kim
for(var i = 0; i < 3; i++) {
console.log(i) // print: 0、1、2
}
console.log(i) // print: 3
var myName = 'Kim';
var myName = 'Kitty';
console.log(myName); // expect print: Kitty
.
let
簡介:
let
宣告變數,該變數只能在 Block Scope 取用,不能在其他地方取用for(let i = 0; i < 3; i++) {
console.log(i) // print: 0、1、2
}
console.log(i) // Uncaught ReferenceError: i is not defined
let myName = 'Kim';
let myName = 'Kitty'; // Uncaught SyntaxError: Identifier 'myName' has already been declared
console.log(myName);
let myName = 'Kim';
if (true) {
let myName = 'Kitty';
console.log(myName); // expect print: Kitty
myName = 'Kate';
console.log(myName);// expect print: Kate
}
console.log(myName); // expect print: Kim
let myName = 'Kim';
if (true) {
myName = 'Kate';
}
console.log(myName); // expect print: Kate
.
const
簡介:
let
的 2. & 3. 特性const
宣告變數時,就要賦予初始值(Initial value)const myName; // Uncaught SyntaxError: Missing initializer in const declaration
const myName = 'Kim';
myName = 'Kitty'; // Uncaught TypeError: Assignment to constant variable.
.
let myName = 'Kim';
if (true) {
console.log(myName); // expect print: Kim
let myHobby = 'Climb the moutain';
}
console.log(myHobby); // Uncaught ReferenceError: myHobby is not defined
var
是具 Function Scope 特性,所以只有是否在 function 內才會影響到它子父層的判定⬇️ 在 function 內
var myName = 'Kim';
function greeting() {
var greet = 'Hi';
console.log(`${greet} ${myName}.`); // print: Hi Kim.
}
greeting();
console.log(greet); // Uncaught ReferenceError: greet is not defined
⬇️ 不在 function 內,而是別的 Block
var myName = 'Kim';
if (true) {
var greet = 'Hi';
console.log(`${greet} ${myName}.`); // print: Hi Kim.
}
console.log(greet); // print: Hi
學習至今的心得是,如果要減少 bug 產生...
✅ 建議都使用 const
,除非很確定變數會改變的話就使用let
⚠️ 不要使用 var
[JS學徒特訓班] JavaScript ES6 : var, let, const 差異
The Complete JavaScript Course 2022: From Zero to Expert! Unit 92 & 93
以上是今天的分享,謝謝看完的你!